package testes;

import static implementacao.Constantes.*;
import static junit.framework.Assert.*;
import implementacao.FornecedorDeSenha;
import implementacao.Retorno;
import implementacao.Senha;
import implementacao.Tentativa;

import org.junit.Before;
import org.junit.Test;

public class FornecedorDeSenhaTest {

	private FornecedorDeSenha f;

	@Before
	public void setUp() {
		Senha s = new Senha(new int[] {AMARELO, VERDE, VERMELHO, ROSA});
		f = new FornecedorDeSenha(s);
	}

	@Test
	public void testRetornoAcertoParcial1() throws Exception {
		Tentativa t = new Tentativa(new int[] {VERDE, AMARELO, VERMELHO, ROSA});
		Retorno esperado = new Retorno(new int[] {PRETO, PRETO, BRANCO, BRANCO});
		Retorno resultado = f.getRetorno(t);
		assertEquals(esperado, resultado);
	}

	@Test
	public void testRetornoAcertoParcial2() throws Exception {
		Tentativa t = new Tentativa(new int[] { ROXO, VERMELHO, LARANJA, ROSA});
		Retorno esperado = new Retorno(new int[] {PRETO, BRANCO, VAZIO, VAZIO});
		Retorno resultado = f.getRetorno(t);
		assertEquals(esperado, resultado);
	}

	@Test
	public void testRetornoSemAcerto() throws Exception {
		Tentativa t = new Tentativa(new int[] {ROXO, LARANJA, MARROM, AZUL});
		Retorno esperado = new Retorno(new int[] {VAZIO, VAZIO, VAZIO, VAZIO});
		Retorno resultado = f.getRetorno(t);
		assertEquals(esperado, resultado);
	}
	
	@Test
	public void testRetornoAcertoTotalCor() throws Exception {
		Tentativa t = new Tentativa(new int[] {VERMELHO, ROSA, VERDE, AMARELO});
		Retorno esperado = new Retorno(new int[] {BRANCO, BRANCO, BRANCO, BRANCO});
		Retorno resultado = f.getRetorno(t);
		assertEquals(esperado, resultado);
	}

	@Test
	public void testRetornoAcertoTotalCorPosicao() throws Exception {
		Tentativa t = new Tentativa(new int[] {AMARELO, VERDE, VERMELHO, ROSA});
		Retorno esperado = new Retorno(new int[] {PRETO, PRETO, PRETO, PRETO});
		Retorno resultado = f.getRetorno(t);
		assertEquals(esperado, resultado);
	}
}
